﻿using System;
using System.Text.RegularExpressions;
using PagSeguro.Mvc.Recursos;

namespace PagSeguro.Mvc.Extensions
{
    internal static class StringExtensions
    {
        /// <summary>
        /// Converte uma String em Int32
        /// </summary>
        /// <param name="valor">Valor em String</param>
        /// <returns>Valor convertido em Int32, caso não converta é retornado o valor default: 0</returns>
        internal static Int32 ToInt32(this string valor)
        {
            Int32 output;
            Int32.TryParse(valor.TiraEspacos(), out output);

            return output;
        }

        /// <summary>
        /// Converte uma String em Int64
        /// </summary>
        /// <param name="valor">Valor em String</param>
        /// <returns>Valor convertido em Int64, caso não converta é retornado o valor default: 0</returns>
        internal static Int64 ToInt64(this string valor)
        {
            Int64 output;
            Int64.TryParse(valor.TiraEspacos(), out output);

            return output;
        }

        /// <summary>
        /// Converte uma String em Decimal
        /// </summary>
        /// <param name="valor">Valor em String</param>
        /// <returns>Valor convertido em Decimal, caso não converta é retornado o valor default: 0</returns>
        internal static decimal ToDecimal(this string valor)
        {
            Decimal output;
            Decimal.TryParse(valor.TiraEspacos(), out output);

            return output;
        }

        /// <summary>
        /// Converte uma String em DateTime
        /// </summary>
        /// <param name="valor">Valor em String</param>
        /// <returns>Valor convertido em DateTime, caso não converta é retornado o valor default: 01/01/0001</returns>
        internal static DateTime ToDateTime(this string valor)
        {
            DateTime output;
            DateTime.TryParse(valor, out output);

            return output;
        }

        /// <summary>
        /// Tira todos os espaços em brancos contidos na String.
        /// </summary>
        /// <param name="valor">Valor com espaços em branco.</param>
        /// <returns>Retorna a String sem espaços em branco.</returns>
        internal static string TiraEspacos(this string valor)
        {
            return (valor == null) ? String.Empty : Regex.Replace(valor, @"\s", "");
        }

        /// <summary>
        /// Formata a string com máscara para telefone no padrão brasileiro.
        /// </summary>
        /// <param name="valor"></param>
        /// <returns></returns>
        internal static string MascaraParaTelefoneBR(this String valor)
        {
            return Regex.Replace(valor, @"^(\d{2})(\d{4})(\d{4})$", "($1) $2-$3");
        }

        /// <summary>
        /// Formata a string com máscara para CEP.
        /// </summary>
        /// <param name="valor">CEP.</param>
        /// <returns>Valor formatado com máscara para CEP.</returns>
        internal static string MascaraParaCEP(this String valor)
        {
            return Regex.Replace(valor, @"^(\d{5})(\d{3})$", "$1-$2");
        }
    }
}